<?php	
	/**
	 * Min klass LOGIN HANDLER har hand om funktionerna för att användaren ska kunna logga in och kunna logga ut.
	 * Innehåller även en funktion för att kontrollera om användaren är inloggad.
	 */	 
	class LoginHandler {
		
		private $sessionUserLogsIn = 'sessionUserLogsIn';				
		private $database = null;

		//----- FUNKTION: CONSTRUCT ---------------------------------------------------------------------------------------------
		/**
		* Konstruktor funktion som lägger till en databas i vår privata variabel $database.
		* @param Database $database Databasen
		*/
		public function __construct(Database $database)
		{
			$this->database = $database;
		}
		

		//----- FUNKTION: USER IS LOGGED IN -------------------------------------------------------------------------------------
		/**
		* Funktion för att kontrollera om användaren är inloggad med hjälp av session.
		* @return bool
		*/
		public function UserIsLoggedIn()
		{
			if(isset($_SESSION[$this -> sessionUserLogsIn])){
				return true;	
			}
			return false;
		}
		
				
		//----- FUNKTION: USER LOGS IN ------------------------------------------------------------------------------------------
		/**
		* Funktion för att logga in användaren med hjälp av användarnamn och lösenord.
		* @param string $myUsername inparameter som innehåller datan som användaren skrev in.
		* @param string $myPassword inparameter som innehåller datan som användaren skrev in.
		* @return bool
		*/
		public function UserLogsIn($myUsername, $myPassword)
		{
			$query = "SELECT userID, userName, userPassword FROM user WHERE userName = ? LIMIT 1";
			if ($statement = $this->database->PrepareQuery($query)) {

				$statement->bind_param("s", $myUsername);
				$statement = $this->database->Select($statement);
				$statement->bind_result($database_userID, $database_userName, $database_userPassword);
				$statement->fetch();
				
				if ($statement->num_rows == 1) {
				
					if ($myPassword == $database_userPassword) {
						$_SESSION[$this -> sessionUserLogsIn] = true;
						return true;
					}

				} else {
					return false;
				}				
			}
			return false;					
		}
		
		
		//----- FUNKTION: USER LOGS OUT -----------------------------------------------------------------------------------------
		/**
		* Funktion för att logga ut användaren, genom att nollställa sessionvariabeln.
		*/
		public function UserLogsOut()
		{
			if (isset ($_SESSION [$this -> sessionUserLogsIn])) {
				unset ($_SESSION [$this -> sessionUserLogsIn]);				
			}			
		}
		


		// ----------------------------------------------------------------------------------------------------------------------
		// - TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST -
		// ----------------------------------------------------------------------------------------------------------------------		
		public function LogTest()
		{
			
			// - TEST DEL 1--------------------------------------------------

			// Vi startar med att försätta oss i utloggat tillstånd genom att anropa funktionen USER LOGS OUT. Som i sin tur kontrollerar om det finns en session => tar bort sessionen.	
			$this -> UserLogsOut();
			
			// Vi kontrollerar om vi är inloggade.
			if ($this -> UserIsLoggedIn() == true) {
				echo "!FEL! i test av kontrollering om vi är i utloggat tillstånd. (DVS: vi är inloggade)";
				return false;	
			}			
			
			// Nu fortsätter vi med ett försöka till att logga in med FEL användar uppgifter. Kontrollera om funktionen för att logga in fungerar.(Här ska det INTE fungera att logga in.	
			if ($this -> UserLogsIn('wrongUsername', 'wrongPassword') == true) {
				echo "!FEL! vid inloggning med fel användar uppgifter.  (User Logs In)";
				return false;	
			}
			
			// Nu fortsätter vi med ett försöka till att logga in med RÄTT användar uppgifter. Kontrollera om funktionen för att logga in fungerar.(Här ska det fungera att logga in.
			if ($this -> UserLogsIn('admin', 'hej123') == false) {
				echo "!FEL! vid inloggning med rätt användar uppgifter.  (User Logs In)";
				return false;	
			}
			
			// Vi kontrollerar om vi är inloggade.
			if ($this -> UserIsLoggedIn() == false) {
				echo "!FEL! Vid inloggning. Vi är inte i ett inloggat tillstånd.";
				return false;	
			}
			
			// Kontrollera om vi kan logga ut med USER LOGS OUT.
			$this -> UserLogsOut();
			
			// Här ska vi försöka logga in med rätt användarnamn men med fel lösenord.
			if ($this -> UserLogsIn('admin', 'wrongPassword') == true) {
				echo "!FEL! vid inloggning med fel lösenord.  (User Logs In)";
				return false;	
			}
			return true; // retunerar true om den inte har gått in i någon av testerna och retunerar false så vi kan få ut vårt rätt meddelande i index.php		
		}
	}	
?>